package com.zndroid.gridview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.core.content.res.ResourcesCompat;

import com.zndroid.gridview.inner.widget.GridImageViewWrapper;

import java.io.Serializable;
import java.util.List;

/**
 * @author lzy
 */
public abstract class AGridImageViewAdapter<T extends IImageBean> implements Serializable {

    protected Context context;
    private List<T> imageInfo;

    public AGridImageViewAdapter(Context context, @NonNull List<T> imageInfo) {
        this.context = context;
        this.imageInfo = imageInfo;
    }

    /**
     * 如果要实现图片点击的逻辑，重写此方法即可
     *
     * @param context             上下文
     * @param imageView           当前选中的ImageView
     * @param gridImageViewLayout 九宫格控件
     * @param index               当前点击图片的的索引
     * @param imageInfo           图片地址的数据集合
     */
    protected void onImageItemClick(Context context, ImageView imageView, GridImageViewLayout gridImageViewLayout, int index, List<T> imageInfo) {
    }

    /**
     * 生成ImageView容器的方式，默认使用NineGridImageViewWrapper类，即点击图片后，图片会有蒙板效果
     * 如果需要自定义图片展示效果，重写此方法即可
     *
     * @param context     上下文
     * @param position cove bitmap
     * @return 生成的 ImageView
     */
    protected ImageView generateImageView(Context context, int position) {
        GridImageViewWrapper imageView = new GridImageViewWrapper(context);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageResource(R.drawable.ic_gil_default_color);

        Bitmap coverBitmap = getCoverBitmap(position);

        if (null != coverBitmap) {
            imageView.setCoverBitmap(coverBitmap);
        }

        return imageView;
    }

    private Bitmap getCoverBitmap(int position) {
        if (position < 0) { return null; }
        int resId = imageInfo.get(position).supplyCoverResId();
        if (resId <= 0) { return null; }
        return ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), resId, context.getTheme())).getBitmap();
    }

    public List<T> getImageInfo() {
        return imageInfo;
    }

    public void setImageInfoList(List<T> imageInfo) {
        this.imageInfo = imageInfo;
    }
}